
# 重写jwt_response_payload_handler　可以实现　返回token　和其他数据
import re

from users.models import Users


def jwt_response_payload_handler(token, user=None, request=None):
    """
    自定义jwt认证成功返回数据
    """
    return {
        'token': token,
        'username': user.username,
        'user_id': user.id,

    }


"""
1.根据用户在用用户名的地方输入内容进行判断，如果用户输的是手机号，我们就根据手机号查找用户
否则根据用户名查找

2.如果用户查寻出来，我们在校验密码
"""

from django.contrib.auth.backends import ModelBackend


def get_user_by_account(username):
    """
    根据用户输入的信息 判断是手机号还是用户名
    :param username:
    :return:
    """

    try:
        if re.match("1[3-9]\d{9}",username):
            user = Users.objects.get(mobile=username)
        else:
            user = Users.objects.get(username=username)
    except Users.DoesNotExist:
        user = None
    return user

class UsernameMobileAuthModelBackend(ModelBackend):

    def authenticate(self, request, username=None, password=None, **kwargs):
        # 1.根据用户在用用户名的地方输入内容进行判断，如果用户输的是手机号，我们就根据手机号查找用户
        # 否则根据用户名查找
        user = get_user_by_account(username)

        # 2.如果用户查寻出来，我们在校验密码

        if user is not None and user.check_password(password):
            return user


